visNetwork, réseaux et arbres de décisions

Titouan Robert et Benoît Thieurmel

29 juin 2017




Le package visNetwork

visNetwork est un package R pour la visualisation de réseaux. Il repose sur la librairie JavaScript vis.js : http://visjs.org/.

Il a été développé grâce au package htmlwidgets.


Installation

install.packages("visNetwork") #Depuis le CRAN
devtools::install_github("datastorm-open/visNetwork") #Version de dev

Aide / Support

https://github.com/datastorm-open/visNetwork


http://datastorm-open.github.io/visNetwork/












Premier exemple de réseau

Au minimum, visNetwork a besoin de deux informations

nodes <- data.frame(id = 1:5)
edges <- data.frame(from = c(1,2,3,4,1), to = c(1,3,4,5,5))

visNetwork(nodes, edges, height = "300px")

Customisation des noeuds et des arêtes


Les noeuds

nodes <- data.frame(id = 1:5,
  label = paste("Node", 1:5),
  shape = c("square", "triangle", "dot", "star", "database"),
  color = c("darkred", "green", "orange", "darkblue", "purple"),
  shadow = c(FALSE, TRUE, FALSE, TRUE, TRUE))     

Les arêtes

edges <- data.frame(from = 1:6, to = c(2, 2, 3, 5, 3, 6), 
  label = paste0("Edge ", 1:6), length = 200,
  arrows = c("to", "from", "middle", "middle;to", "from", "to"),
  dashes = c(TRUE, FALSE), smooth = c(TRUE, FALSE), width = 2,
  color = c("red", "darkgreen","darkblue","orange","purple","black")) 

Tooltips, physique, et layout

Tooltips html (title)

nodes <- data.frame(id = 1:2, label = c("SIMPLE", "HTML"),
  title  = c("Hi R community", 
  "<img src='RStudio-Ball.png'></br><b>Rencontres R 2017</b></br>
  <a href='http://angletr2017.com/'>Site web</a>"))
edges <- data.frame(from = 1, to = 2, length = 200) 
visNetwork(nodes, edges, height = "500px", width = "100%")
















Layout et physique

nodes <- data.frame(id = 1:7)
edges <- data.frame(from = c(1,1,1,1,5,5), to = c(2,3,4,5,6,7))
visNetwork(nodes, edges) %>% visEdges(arrows = "to") %>%
  visHierarchicalLayout(direction = "UD", levelSeparation = 200) %>%
  visPhysics(solver = "hierarchicalRepulsion", 
             hierarchicalRepulsion = list(nodeDistance = 200))  

Les nouveautés

Les arbres de décisions

Les arbres de décisions sont utilisés quand on veut expliquer une variable cible en fonction de variables explicatives.

Il sont binaires, et obtenus par coupe successives d’une population en sous échantillons.

Sous R, utilisation de la fonction rpart.


Il existe déjà dans R des outils de visualisation



Un exemple classique

Un exemple avec le package rpart.plot

visTree : visualisation d’arbres de décisions

La nouvelle fonction visTree permet de visualiser et d’explorer dynamiquement des arbres de régression et de classification.


Elle se base sur le résultat de la fonction rpart.





Arguments semblables à ceux des réseaux classiques



Arguments propres aux arbres de décisions



Exemple basique d’arbres de décisions

Arbre de classification

res <- rpart(Species~., data=iris)
visTree(res, main = "Arbre de classification", legendWidth = 0.2, nodesFontSize = 16, edgesFontSize = 16, edgesFontAlign = "middle")

Arbre de régression

data("diamonds")
res <- rpart(price~., data=diamonds)
visTree(res, main = "Arbre de regression", legendWidth = 0.2)

Arbres plus complexes

res <- rpart(Statut~., data=ptitanic, control = (rpart.control(cp = 0.00005)))
visTree(res, height = "800px", nodesPopSize = TRUE, minNodeSize = 10, maxNodeSize = 30)

Des outils de customisation clé en main

Un outil de customisation facile à utiliser développé en shiny



# sur un data.frame
net <- visTreeEditor(data = iris)

# sur un arbre
net <- visTreeEditor(data = rpart(iris))




























Un module shiny, pour une intégration simplifiée



data("diamonds")
shinyApp(ui = fluidPage(visTreeModuleUI(id = "id1")), 
         server = function(input, output, session) {
           callModule(visTreeModuleServer,
                      "id1",
                      data = reactive(diamonds))
           })

Présentation du module (visTreeModuleServer & visTreeModuleUI)

Conclusion

Les apports de visTree

Nos futurs développements

Si vous avez des suggestions :

https://github.com/datastorm-open/visNetwork

titouan.robert@datastorm.fr & benoit.thieurmel@datastorm.fr

Coupe du monde de football